import * as ol from '../ol'
import 'ol/ol.css';
import XYZSDK from './XYZSDK'
import ViewSDK from './ViewSDK'
import ParameterCheckerSDK from './ParameterCheckerSDK'
// 自定义XYZMap类，继承自 ol.Map
class XYZMap extends ol.Map {
    /**
     @constructor XYZMap
     * @description 加载底图。 用于加载XYZ的地图，如天地图、高德地图、百度地图的XYZ。
     * @param {String | HTMLElement} container - map容器
     * @param {Object} options - map初始化参数
     * @property {Array<Number>} [options.center=[0, 0]] - 初始化中心点(可选)
     * @property {Number} [options.zoom=4] - 初始化级别(可选)
     * @property {String} options.url - 底图地址
     * @property {String} [option.layerId] - 图层id(可选)
     * @property {String} [option.zIndex] - zIndex(可选)
     * @property {Number} [option.opacity=0.7] - 不透明度，取值范围为 0（完全透明）到 1（完全不透明）(可选)
     * @property {Number} [option.minZoom=default] - 最小显示等级(可选)
     * @property {Number} [option.maxZoom=default] - 最大显示等级(可选)
     * @example <caption>加载 XYZ 地图</caption>
     * let map = new GISMap.XYZMap('map',{
     *     zoom: 4,
     *     center:[104.36522215092073,34.73011985764974],
     *     url:'http://wprd0{1-4}.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=1&style=7'
     * })
     * // 获取当前底图对象
     * console.log(map);
     */

    constructor(container, options) {
        let sdk = new ParameterCheckerSDK();
        let params = {
            container: container,
            url: options.url,
        };
        sdk.checkParams(params)
        /**
         * 将图层添加到地图上。
         * @method
         * @name XYZMap#addLayer
         * @param {ol.layer.Base} layer - 要添加的图层。
         * @returns {void}
         */

        /**
         * 将图层从地图上移除。
         * @method
         * @name XYZMap#removeLayer
         * @param {ol.layer.Base} layer - 要移除的图层。
         * @returns {void}
         */

        /**
         * 获取地图上的所有图层。
         * @method
         * @name XYZMap#getLayers
         * @returns {ol.Collection<ol.layer.Base>} 地图上的所有图层。
         */

        /**
         * 获取地图的视图对象。
         * @method
         * @name XYZMap#getView
         * @returns {ol.View} 地图的视图对象。
         */

        /**
         * 设置地图的视图对象。
         * @method
         * @name XYZMap#setView
         * @param {ol.View | undefined} view - 要设置的视图对象。
         * @returns {void} 要设置的视图对象。
         */

        /**
         * 获取地图的容器元素。
         * @method
         * @name XYZMap#getTargetElement
         * @returns {Element | null} 地图的容器元素。
         */

        /**
         * 获取地图容器的大小。
         * @method
         * @name XYZMap#getSize
         * @returns {ol.Size} 地图容器的大小。
         */

        /**
         * 强制地图进行渲染。
         * @method
         * @name XYZMap#render
         * @returns {void} 强制地图进行渲染
         */
        super({
            target: container,
            // 加载XYZ地图的方法
            layers: [new XYZSDK(options)],
            // 加载View的SDK
            view: new ViewSDK(options),
        });
        this.layers = new XYZSDK(options)
        this.view = new ViewSDK(options)
    }
}

export default XYZMap;